//cellのオブジェクト
function Zzcell(cid, text, image_url, detail, sales_rank, total_reviews, average_rating, price, number_ofpages,number_ofclicks,publication_date, author,genre, publisher){

    //中心の座標
    this.x = 0;
    this.y = 0;

    //目標の座標
    this.to_x = 0;
    this.to_y = 0;

    //移動の座標
    this.dx = 0;
    this.dy = 0;

    //大きさの定義
    this.width = 140.0;
    this.height = 30.0;

    //自分の属する軸
    this.axis = null;

    //どの軸かのフラグ
    this.axis_no = 0;

    //表示するかどうかのフラグ(軸の方が優先される)
    this.display = true;

    //マウスが乗っているかどうかのフラグ
    this.onmouse = false;

    //中心セルかどうか
    this.is_center = false;

    //Ajaxで取得するデータ
    this.data = {};
    this.data.cid = cid;
    this.data.body = text;
    this.data.detail = detail;
    this.data.sales_rank = sales_rank;
    this.data.total_reviews = total_reviews;
    this.data.average_rating = average_rating;
    this.data.price = price;
    this.data.number_ofpages = number_ofpages;
    this.data.number_ofclicks = number_ofclicks;
    this.data.publication_date = publication_date;
    this.data.image_url = image_url;
    this.data.author = author;
    this.data.genre = genre;
    this.data.publisher = publisher;

    //imageを読み込む
    var img = new Image();
    if (image_url){
        img.src = image_url + "?" + new Date().getTime();
        this.data.image = img;
    }
    this.draw = function(){

        if(this.data.body == ""){
            return false;
        }

        this.setWidth();
        this.setHeight();

        //影を表示
        ctx.shadowBlur = 5;
        ctx.shadowColor = 'rgba(0,0,0,0.5)';
        ctx.shadowOffsetX = 3;
        ctx.shadowOffsetY = 3;

        // cellの上にマウスが乗っているかどうか
        //ただし軸が中心でない場合のセンターにあるセルは、オンマウスしていない事にする
        if (((mouseX > this.x - this.width / 2 && mouseX < this.x + this.width / 2) && (mouseY > this.y - this.height / 2 && mouseY < this.y + this.height / 2)) && (this.axis.focus || !this.is_center)) {
            this.onmouse = true;
        }
        else {
            this.onmouse = false;
        }

        //表示するかしないか
        if (this.display) {
            if (this.onmouse) {
                //青で表示する
                ctx.fillStyle = 'rgb(65,105,225)';
                //tooltipが無いならば作成
                if(tooltip == undefined){
                    //マウスオーバーした瞬間なのでログを送る
                    //console.log("sendlog");
                    logger.mouseover_cells_log(this.data.cid);
                     //console.log();

                    logger.mouseover_cells_log(this.data.cid);
                    //領域によって作る場所を変える
                    if (this.x > settings.width / 2) {
                        tooltip = new Tooltip([this.x - this.width / 2, this.y], this.data.body, true, [320,180], null, null, null, null, this);
                    }                
                    else {
                        tooltip = new Tooltip([this.x + this.width / 2, this.y], this.data.body, false, [320,180], null, null, null, null, this);
                    }
                }
            }
            else {
                //軸ならば灰色、選択セルならば水色
                //軸の種類によって色を変える
                //if (this.axis.focus) {
                    ctx.fillStyle = 'rgb(209,232,255)';
                //}
                //else {
                //    ctx.fillStyle = 'rgba(209,232,255,0.4)';
                //}
            }
            curvyCornerFillRect(this.x - this.width / 2, this.y - this.height / 2, this.width, this.height);

            //テキスト表示
            //影を消す
            ctx.shadowColor = 'rgba(0,0,0,0)';

            if (this.data !== "") {
                //文字の表示

                //セルごとに改行する文字数を決定する:ToDo

                ctx.textAlign = 'left';
                if (this.onmouse) {
                    ctx.fillStyle = 'rgb(255,255,255)';
                }
                else {
                    ctx.fillStyle = 'rgb(102,102,102)';
                }
                //フォントをセルごとに設定する:ToDo
                //ctx.font = "10px 'bold sans serif'";
                ctx.font = "10px 'monospace'";
                //ctx.font = "14px 'monospace'";

                //切る位置をセルごとに設定する
                var scale = 1.0 - Math.sqrt(Math.pow(this.x - x(0.0), 2) + Math.pow(this.y - y(0.0), 2)) / Math.sqrt(Math.pow(settings.width / 2, 2) + Math.pow(settings.height / 2, 2)) * 0.7;
                //もとは20
                var stringsize = parseInt(20 * scale);
                var bodys = sliceString(this.data.body, stringsize);
                ctx.fillText(bodys[0], this.x - this.width / 2 + 5, this.y);

            }

            //ランキング数値等を左上に表示
            ctx.fillStyle = this.axis.color;

            //テキスト表示
            //影を消す
            ctx.shadowColor = 'rgba(0,0,0,0)';

            if (this.data !== "") {
                //文字の表示
                ctx.textAlign = 'left';
                /*
                            if (this.onmouse) {
                                ctx.fillStyle = 'rgb(102,102,102)';
                            }
                            else {
                                ctx.fillStyle = 'rgb(102,102,102)';
                            }
                            */
                //フォントをセルごとに設定する:ToDo
                ctx.font = "16px 'Arial Bold'";

                //切る位置をセルごとに設定する
                var scale = 1.0 - Math.sqrt(Math.pow(this.x - x(0.0), 2) + Math.pow(this.y - y(0.0), 2)) / Math.sqrt(Math.pow(settings.width / 2, 2) + Math.pow(settings.height / 2, 2)) * 0.7;
                //もとは20
                var stringsize = parseInt(20 * scale);
                //rankingに軸IDにあわせて適切な値を代入
                var ranking = " ";
                if (this.axis.aid == "0"){
                //著者
                }else if(this.axis.aid == "2"){
                //出版社
                }else if(this.axis.aid == "3"){
                    //売上ランキング
                    ranking = this.data.sales_rank + "位";
                }else if(this.axis.aid == "4"){
                    //レビュー数
                    ranking = this.data.total_reviews + "レビュー";
                }else if(this.axis.aid == "5"){
                    //評価レート
                    ranking = this.data.average_rating + "点";
                }else if(this.axis.aid == "6"){
                    //価格
                    ranking = this.data.price + "円";
                }else if(this.axis.aid == "7"){
                    //ページ数
                    ranking = this.data.number_ofpages + "ページ";
                }else if(this.axis.aid == "8"){
                    //クリック数
                    ranking = this.data.publication_date;
                }else if(this.axis.aid == "9"){
                    //出版日
                    ranking = this.data.number_ofclicks + "クリック";
                }
                var bodys = sliceString(ranking, stringsize);
                ctx.fillText(bodys[0], this.x - this.width / 2 + 1, this.y - this.height / 2 - 14);

            }

        }
    };
    this.update = function(){
        if (this.axis.slide) {
            //軸がスライド中なら移動
            var x_stop = false;
            var y_stop = false;
            if ((this.to_x > this.x + 1) || (this.to_x < this.x - 1)) {
                //xが移動中
                this.x = this.x + this.dx;
            }
            else {
                x_stop = true;
            }
            if ((this.to_y > this.y + 1) || (this.to_y < this.y - 1)) {
                //yが移動中
                this.y = this.y + this.dy;
            }
            else {
                y_stop = true;
            }
            if (x_stop && y_stop) {
                this.axis.slide = true;
                cell_moving = false;
            }
            else {
                cell_moving = true;
            }
        }
        this.draw();
    };
    this.setWidth = function(){
        var scale = 1.0 - Math.sqrt(Math.pow(this.x - x(0.0), 2) + Math.pow(this.y - y(0.0), 2)) / Math.sqrt(Math.pow(settings.width / 2, 2) + Math.pow(settings.height / 2, 2)) * 0.6;
        this.width = scale * 210;
        if (!this.axis.focus) {
            this.width *= 0.8;
        }
    };
    this.setHeight = function(){
        var scale = 1.0 - Math.sqrt(Math.pow(this.x - x(0.0), 2) + Math.pow(this.y - y(0.0), 2)) / Math.sqrt(Math.pow(settings.width / 2, 2) + Math.pow(settings.height / 2, 2)) * 0.6;
        this.height = scale * 50;
        if (!this.axis.focus) {
            this.height *= 0.8;
        }
    };
}
